iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
0
Modern Web

Chrome extension 學習手札系列 第 25

Chrome extension 學習手札 25 - 腳本實作 - 台鐵時刻表查詢系統 - part 7

  • 分享至 

  • xImage
  •  

今天的目標就是完成歷史紀錄,看有沒有時間再優化一下其他地方

首先要先幫chrome.storage預設資料

bg.js

class TrainManager {
    constructor() {
        ...
        ...
        //預設值為陣列
        chrome.storage.sync.get('history',value=>{
            if(!value.history){
                chrome.storage.sync.set({'history':[]})
            }
        })
    }
    ...
    ...
}

然後就是給浮動頁面串接的部分

bg.js

//in TrainManager
fetchHistoryList(){
    return new Promise((resolve,reject)=>{
        chrome.storage.sync.get('history',value=>{
            resolve(value.history)
        })
    })
}

回到浮動頁面,跟其他資料一樣是用mounted取得background物件以及promise

popup/main.js

,
mounted() {
    //更新資料
    chrome.runtime.getBackgroundPage(background => {
        this.dataService = background.trainManager
        this.dataService.fetchHistoryList().then(historys=>{
            this.historyList = historys
        })
    })
}

這樣,串接的部分就完成了,接下來就是新增歷史紀錄的功能
所以我們又回到後台腳本
建立一個儲存函數,並且儲存近五筆的歷史紀錄,並且移除之前的資料

bg.js

saveActionData(){
    chrome.storage.sync.get('history',value=>{
        //移除最舊的資料
        let historys = value.history
        if(historys.length > 4 ){
            historys.splice(0, 1)
        }
        historys.push(this.actionData)
        this.actionData = null
        chrome.storage.sync.set({'history':historys})
    })
}

並且在我們前幾天做的監控事件中,先回傳資料給內容腳本用,同時再儲存到chrome.stroage

msgListener(request, sender, sendResponse){
    switch(request.func){
        case 'getSearch': 
            sendResponse(trainManager.actionData)
            trainManager.saveActionData()
            break
    }   
}

於是我們就大功告成拉!所以近五筆資料都會被儲存在chrome.storage裡,
並且在介面上點擊就可以直接使用,超方便的!

明天,我們就來嘗試上架看看吧!


上一篇
Chrome extension 學習手札 24 - 腳本實作 - 臺鐵時刻表查詢系統 - part 6
下一篇
Chrome extension 學習手札 26 - 測試上架
系列文
Chrome extension 學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言